#include <QtGui>
#include <QTableView>
#include <QVBoxLayout>
#include <QHBoxLayout>

#include "RbTableHeaderView.h"
#include "RbWindow.h"

#include <QTreeView>

RbWindow::RbWindow(QWidget* parent)
	: QWidget(parent)
{
	// RbTableHeaderView * hHead = new RbTableHeaderView(Qt::Horizontal, 3, 4);
	// QAbstractItemModel * hModel = hHead->model();
	// QStandardItemModel * dataModel = new QStandardItemModel;
	//
	// hHead->setSpan(0, 0, 3, 0);
	// hHead->setSpan(0, 1, 2, 2);
	// hHead->setSpan(1, 3, 2, 0);
	//
	// // hModel->insertRow(0,)
	//
	//
	// hModel->setData(hModel->index(0, 0), QStringLiteral("一级表头"), Qt::DisplayRole);
	// hModel->setData(hModel->index(0, 1), QStringLiteral("一级表头"), Qt::DisplayRole);
	// hModel->setData(hModel->index(2, 1), QStringLiteral("二级表头"), Qt::DisplayRole);
	// hModel->setData(hModel->index(2, 2), QStringLiteral("二级表头"), Qt::DisplayRole);
	// hModel->setData(hModel->index(0, 3), QStringLiteral("一级表头"), Qt::DisplayRole);
	// hModel->setData(hModel->index(1, 3), QStringLiteral("二级表头"), Qt::DisplayRole);
	// hHead->setRowHeight(0, 30);
	// hHead->setRowHeight(1, 30);
	// hHead->setRowHeight(2, 30);
	//
	//
	// hHead->setSectionsClickable(true);
	//
	// hHead->setCellBackgroundColor(hModel->index(0, 0), 0xcfcfcf);
	// hHead->setCellBackgroundColor(hModel->index(0, 1), 0xcfcfcf);
	// === 三层表头 ===
	// RbTableHeaderView *hHead = new RbTableHeaderView(Qt::Horizontal, 3, 6);
	// QAbstractItemModel *hModel = hHead->model();
	//
	// // 合并关系
	// hHead->setSpan(0, 0, 1, 2); // 顶层第1组
	// hHead->setSpan(0, 2, 1, 2); // 顶层第2组
	// hHead->setSpan(0, 4, 1, 2); // 顶层第3组
	// hHead->setSpan(1, 1, 2, 1); // 第二层跨两行
	//
	// // 数据内容
	// hModel->setData(hModel->index(0, 0), QStringLiteral("基本信息"), Qt::DisplayRole);
	// hModel->setData(hModel->index(1, 0), QStringLiteral("姓名"), Qt::DisplayRole);
	// hModel->setData(hModel->index(1, 1), QStringLiteral("性别"), Qt::DisplayRole);
	// hModel->setData(hModel->index(0, 2), QStringLiteral("联系方式"), Qt::DisplayRole);
	// hModel->setData(hModel->index(1, 2), QStringLiteral("电话"), Qt::DisplayRole);
	// hModel->setData(hModel->index(1, 3), QStringLiteral("邮箱"), Qt::DisplayRole);
	// hModel->setData(hModel->index(0, 4), QStringLiteral("职业信息"), Qt::DisplayRole);
	// hModel->setData(hModel->index(1, 4), QStringLiteral("职位"), Qt::DisplayRole);
	// hModel->setData(hModel->index(1, 5), QStringLiteral("部门"), Qt::DisplayRole);
	//
	// // 行高
	// hHead->setRowHeight(0, 25);
	// hHead->setRowHeight(1, 25);
	// hHead->setRowHeight(2, 25);
//===========================================好的=========
	RbTableHeaderView *hHead = new RbTableHeaderView(Qt::Horizontal);
	hHead->setRowAndColumn(3,6);
	QAbstractItemModel *hModel = hHead->model();

	hHead->setSpan(0, 0, 3, 1);
	hHead->setSpan(0, 1, 1, 4);
	hHead->setSpan(1, 1, 2, 1);
	hHead->setSpan(1, 2, 1, 2);
	hHead->setSpan(0,5,3,0);
	hModel->setData(hModel->index(0, 0), QStringLiteral("编号"), Qt::DisplayRole);
	hModel->setData(hModel->index(0, 1), QStringLiteral("信息分类"), Qt::DisplayRole);
	hModel->setData(hModel->index(1, 1), QStringLiteral("基础信息"), Qt::DisplayRole);
	hModel->setData(hModel->index(1, 2), QStringLiteral("联系信息"), Qt::DisplayRole);
	hModel->setData(hModel->index(2, 2), QStringLiteral("电话"), Qt::DisplayRole);
	hModel->setData(hModel->index(2, 3), QStringLiteral("邮箱"), Qt::DisplayRole);
	hModel->setData(hModel->index(1, 4), QStringLiteral("地址"), Qt::DisplayRole);
	hModel->setData(hModel->index(0, 5), QStringLiteral("备注"), Qt::DisplayRole);

	hHead->setRowHeight(0, 25);
	hHead->setRowHeight(1, 25);
	hHead->setRowHeight(2, 25);
	hHead->setCellBackgroundColor(hModel->index(0,0), QColor(0xcfcfcf));
	hHead->setCellBackgroundColor(hModel->index(0,5), QColor(0xcfcfcf));


	// =====================
	// RbTableHeaderView *hHead = new RbTableHeaderView(Qt::Horizontal, 2, 14);
	// QAbstractItemModel *hModel = hHead->model();
	//
	// // 顶层分组结构（行 0）
	// hHead->setSpan(0, 0, 0, 4);   // 基本信息组（ID、姓名、性别、年龄）
	// hHead->setSpan(0, 4, 0, 3);   // 联系信息组（病历号、出生日期、联系方式）
	// hHead->setSpan(0, 7, 0, 3);   // 地址与健康信息（地址、血型、过敏史）
	// hHead->setSpan(0, 10, 0, 2);  // 病史信息（既往病史、创建时间）
	// hHead->setSpan(0, 12, 0, 2);  // 时间与布尔测试（更新时间、bool测试）
	// // hHead->setSpan(0,0,0,2);
	//
	// // 顶层表头（第 0 行）
	// hModel->setData(hModel->index(0, 0), QStringLiteral("基本信息"), Qt::DisplayRole);
	// hModel->setData(hModel->index(0, 4), QStringLiteral("联系信息"), Qt::DisplayRole);
	// hModel->setData(hModel->index(0, 7), QStringLiteral("健康信息"), Qt::DisplayRole);
	// hModel->setData(hModel->index(0, 10), QStringLiteral("病史信息"), Qt::DisplayRole);
	// hModel->setData(hModel->index(0, 12), QStringLiteral("其他"), Qt::DisplayRole);
	//
	// // 二级表头（第 1 行）
	// QStringList headers = {
	// 	"ID", "姓名", "性别", "年龄", "病历号",
	// 	"出生日期", "联系方式", "地址", "血型", "过敏史",
	// 	"既往病史", "创建时间", "更新时间", "bool测试"
	// };
	//
	// for (int i = 0; i < headers.size(); ++i) {
	// 	hModel->setData(hModel->index(1, i), headers[i], Qt::DisplayRole);
	// }
	//
	// // =====================
	// // 3️⃣ 设置行高
	// // =====================
	// hHead->setRowHeight(0, 28);
	// hHead->setRowHeight(1, 28);



	QStandardItemModel * dataModel = new QStandardItemModel;
	for (int i = 0; i < 10; i++)
	{
		QList<QStandardItem*> items;
		for (int j = 0; j < 14; j++)
		{
			items.append(new QStandardItem(QString("item(%1, %2)").arg(i).arg(j)));
		}
		dataModel->appendRow(items);
	}
	hHead->setRowHeight(0, 30);
	hHead->setRowHeight(1, 30);

	view = new QTreeView(this);
	view->setModel(dataModel);
	view->setHeader(hHead);
	view->setSelectionMode(QAbstractItemView::SingleSelection);
	view->setSortingEnabled(true);
	QVBoxLayout* layoutt = new QVBoxLayout;
	layoutt->addWidget(view);
	setLayout(layoutt);

	connect(hHead, SIGNAL(sectionPressed(int, int)), this, SLOT(horizontalHeaderSection_Pressed(int, int)));
	// connect(vHead, SIGNAL(sectionPressed(int, int)), this, SLOT(verticalHeaderSection_Pressed(int, int)));
}

void RbWindow::horizontalHeaderSection_Pressed(int beginSection, int endSection)
{
	view->clearSelection();
	QAbstractItemView::SelectionMode oldSelectionMode = view->selectionMode();
	for (int i = beginSection; i < endSection + 1; ++i)
		// view->selectColumn(i);
	view->setSelectionMode(oldSelectionMode);
}

void RbWindow::verticalHeaderSection_Pressed(int beginSection, int endSection)
{
	view->clearSelection();
	QAbstractItemView::SelectionMode oldSelectionMode = view->selectionMode();
	for (int i = beginSection; i < endSection + 1; ++i)
		// view->selectRow(i);
	view->setSelectionMode(oldSelectionMode);
}

